import pygame
# 导入 pygame 库，用于所有绘图功能
class CloudLogo:
    def __init__(self,screen_width):
        # 云朵Logo位置 - 初始化在右侧外
        self.cloud_x = screen_width + 50  # 从屏幕右侧开始
        self.cloud_y = 50
        # 云朵移动速度
        self.cloud_speed = 0.6  # 每帧移动0.5像素
        self.screen_width=screen_width

    # 定义更新方法，每一帧都会被调用
    def update(self):
        """更新云朵位置，移出屏幕后重置"""
        # 云朵的 x 坐标减去速度，实现向左移动
        self.cloud_x -= self.cloud_speed
        if self.cloud_x < -200:  # 完全移出屏幕左侧后重置
            # 存储屏幕的宽度，用于重置云朵位置
            self.cloud_x = self.screen_width + 50


    # 绘制云朵logo函数
    def draw(self, screen):
        # 1. 先调用新的函数绘制更好看的云朵形状
        # 这个函数会返回整个云朵的矩形边界，方便我们定位文字
        cloud_rect = self.draw_cloud_shape(screen, self.cloud_x, self.cloud_y)

        # 2. 在云朵内部绘制文字
        # “My snake game” 放在云朵中心靠上的位置
        # 调用 show_text 方法显示 "我的贪吃蛇游戏"
        self.show_text(
            screen,# 在哪个屏幕上画
            # 使用 cloud_rect.centerx 来水平居中
            (cloud_rect.centerx - 70, cloud_rect.centery - 25),# 文字的左上角位置
            "我的贪吃蛇游戏",# 文字内容
            (240, 248, 255),  # 文字颜色 (淡蓝色)
            font_bold=True,# 加粗
            font_size=22# 字体大小
        )
        # 显示姓名
        # 姓名和学号放在 "My snake game" 下方
        self.show_text(
            screen,
            (cloud_rect.centerx - 55, cloud_rect.centery + 10),
            "姓名: 薛琦",
            (0, 0, 0),
            font_size=18
        )
        self.show_text(
            screen,
            (cloud_rect.centerx - 70, cloud_rect.centery + 35),
            "学号: 0241122033",
            (0, 0, 0),
            font_size=18
        )

    # 定义一个专门画云朵形状的方法
    #draw_cloud_shape 方法，使用多个圆形叠加，效果更好
    def draw_cloud_shape(self, screen, x, y):
        # 定义云朵的几种颜色，从主体亮白色到阴影浅灰色，增加立体感
        color_main = (173, 216, 230)  # 主体颜色，淡蓝色
        color_shadow = (135, 206, 235)  # 阴影颜色，稍深一点的蓝色

        # 绘制云朵的不同部分，大的在下，小的在上
        # 为了方便定位，所有的坐标都相对于中心点 (x, y)
        # 通过画多个不同大小、不同位置的圆，把它们叠加起来，形成一朵云的形状
        # 所有圆的坐标都是相对于云朵的中心点 (x, y) 来计算的
        # 底部阴影部分
        # 先画两个稍暗的圆作为底部的阴影
        pygame.draw.circle(screen, color_shadow, (x - 40, y + 20), 30)
        pygame.draw.circle(screen, color_shadow, (x + 20, y + 25), 35)

        # 中间主体部分
        # 再画三个亮的圆作为云朵的主体
        pygame.draw.circle(screen, color_main, (x, y), 40)
        pygame.draw.circle(screen, color_main, (x - 50, y + 5), 35)
        pygame.draw.circle(screen, color_main, (x + 50, y + 10), 40)

        # 顶部蓬松的小圆
        # 最后画两个小的圆作为顶部的点缀，让云朵更蓬松
        pygame.draw.circle(screen, color_main, (x - 20, y - 20), 30)
        pygame.draw.circle(screen, color_main, (x + 30, y - 15), 35)

        # 返回一个能大致包裹住整个云朵的矩形区域
        # 这对于将文本居中至关重要
        # 返回一个刚好能把所有这些圆都包住的矩形区域
        # 这样在 draw 方法里就能知道云朵的大概范围，方便把文字放在中间
        return pygame.Rect(x - 90, y - 40, 180, 100)

    # 定义一个在屏幕上显示文字的函数（和 main.py 里的功能一样）
    def show_text(self,screen, pos, text, color, font_bold = False, font_size = 60, font_italic = False):
        #获取系统字体，并设置文字大小
        cur_font = pygame.font.SysFont("Simsun", font_size)
        #设置是否加粗属性
        cur_font.set_bold(font_bold)
        #设置是否斜体属性
        cur_font.set_italic(font_italic)
        #设置文字内容
        text_fmt = cur_font.render(text, 1, color)
        #获取文本的矩形区域
        text_rect=text_fmt.get_rect()
        #设置文本位置
        text_rect.topleft=pos
        #绘制文字
        screen.blit(text_fmt, text_rect)

